package hyy_2022;

/**
 * 验证回文串
 * 1、只考虑字母和数字字符
 * 2、可以忽略字母的大小写
 */
public class _0809_125_IsPalindrome {

    public static void main(String[] args) {
        isPalindrome("A man, a plan, a canal: Panama");
    }

    /**
     * 1、去除字符串中除数字和字母之外的字符
     * 2、将所有字符变为大写
     * 3、双指针,一个指向头部,一个指向尾部,比较字符是否相等
     *     相等,头指针往右移一位, 尾指针往左移一位,继续比较 ,直至头指针大于尾指针,结束移动,此字符串为回文字符串
     *     不相等,直接返回不是回文字符串
     * @param s
     * @return
     */
    public static boolean isPalindrome(String s) {
        if(s == null) {
            return true;
        }
        s = s.replaceAll("[^0-9a-zA-Z]","");
        if(s.length() == 0) {
            return true;
        } else {
            s = s.toUpperCase();
        }
        s.toUpperCase();
        int length = s.length();
        int i = 0;
        int j = length - 1;
        while(i <= j) {
            if(s.charAt(i) != s.charAt(j)) {
               return false;
            }
            i ++ ;
            j -- ;
        }
        return true;
    }
}
